package com.dbms.execution.execution;

import com.dbms.common.Schema;
import com.dbms.common.Tuple;
import com.dbms.execution.plan.PlanNode;

/**
 * GrantExecutor (授权执行器) 负责执行授权（GRANT）计划。
 * 这个执行器是一个包装器 (Wrapper)。它本身不实现复杂的逻辑，
 * 而是将授权操作（即向系统权限表 `_privileges_` 中添加一条记录）
 * 委托给一个底层的 InsertExecutor 来完成。
 */
public class GrantExecutor implements Executor {

    /**
     * 底层的插入执行器，负责实际的写操作。
     */
    private final Executor insertExecutor;

    /**
     * 标志位，确保授权操作只执行一次。
     */
    private boolean hasExecuted = false;

    /**
     * 构造函数。
     * @param insertExecutor 一个已经配置好的、用于向权限表插入数据的 InsertExecutor。
     */
    public GrantExecutor(Executor insertExecutor) {
        this.insertExecutor = insertExecutor;
    }

    @Override
    public void open() {
        hasExecuted = false;
    }

    @Override
    public Tuple next() {
        if (hasExecuted) {
            return null;
        }

        // 调用底层的 InsertExecutor 来完成实际的授权工作
        insertExecutor.open();
        insertExecutor.next(); // 执行插入
        insertExecutor.close();

        hasExecuted = true;
        // DCL (数据控制语言) 操作不返回元组
        return null;
    }

    @Override
    public void close() {}

    @Override
    public Schema getSchema() {
        return null;
    }

    @Override
    public PlanNode getPlanNode() {
        return null;
    }
}